package http

import (
	"net/http"
	"errors"
	"io"
	"io/ioutil"
	"net/url"
)

func HttpRequest(url, requestType string, data io.Reader, header http.Header) (int,[]byte, http.Header,error) {
	req, err := http.NewRequest(requestType, url, data)
	if err != nil {
		return 500,nil, nil,err
	}
	req.Header = header
	client := &http.Client{}
	res, err := client.Do(req)
	if err != nil {
		return 500,nil, nil,err
	}
	defer res.Body.Close()
	body, err := ioutil.ReadAll(res.Body)
	if err != nil {
		return 500,nil, nil,err
	}
	return  res.StatusCode,body, res.Header,nil
}

func GetRawQueryByArgs(raw string, args string) (string, error) {

	getParams, err := url.ParseQuery(raw)
	if err != nil {
		return "", errors.New("验证登录URL参数格式不正确！")
	}

	var res string
	//如果不存在则返回空字符串
	if _, ok := getParams[args]; !ok {
		return "", nil
	}

	//存在但是数量不是一个，那么返回错误
	if len(getParams[args]) != 1 {
		return "", errors.New("获取参数错误")
	} else {
		res = getParams[args][0]
	}

	return res, nil
}

//从header 中获取token
func GetHeaderToken(r *http.Request) (string, error) {

	//header 中不存在
	if _, ok := r.Header["Token"]; !ok {
		return "", nil
	}

	var token string
	//存在但是数量不是一个，那么返回错误
	if len(r.Header["Token"]) != 1 {
		return "", errors.New("验证登录token数量不正确！")
	} else {
		token = r.Header["Token"][0]
	}

	return token, nil
}



func GetHeaderPriToken(r *http.Request) (string, error) {

	//header 中不存在
	if _, ok := r.Header["PriToken"]; !ok {
		return "", nil
	}

	var token string
	//存在但是数量不是一个，那么返回错误
	if len(r.Header["PriToken"]) != 1 {
		return "", errors.New("验证登录token数量不正确！")
	} else {
		token = r.Header["Token"][0]
	}

	return token, nil
}
